Reducing downtime of computing systems while upgrading is a goal that has been long sought after. Legacy approaches have attempted to address the problem by selecting and deploying different techniques to upgrade the different types of data found in an installation. For example, legacy techniques have provided for upgrade of a system of software applications by up-revving the files containing the application software code followed by a “restart” (e.g., of the application or of the operating system). Other legacy techniques have approached the task of upgrading a relational database by shutting down or otherwise controlling access to the relational database objects for a duration, then copying the database objects in their entirety in order to apply patches to the copy, and then restarting the upgraded relational database with the patched copies of the database objects, and finally restarting the up-revved application software code that would refer to the patched copies of the database objects.
These legacy techniques place a substantial burden on the application code developers. Moreover, as the sheer number and size of the database objects to be upgraded increases, this makes the upgrade cycle more expensive, and legacy techniques become deficient. The legacy techniques emerge as even more deficient when considering that modern database environments often implement a wide range of “derived objects”—objects that are derived from one or more underlying database objects such as tables. For example, a database might hold a database table in the form of a series of columns that hold all mobile phone numbers and corresponding subscriber data for all mobile phone subscribers in the USA. A corresponding derived object in the form of an index might provide for fast searching and access to, for example, all table rows referring to subscribers who are 18 years of age or younger. The derived objects can become very large, sometimes even as large (or larger) than the underlying database object(s).
Thus, applying legacy techniques that merely regenerate all derived objects during an upgrade cycle becomes too expensive or even prohibitive. Improved techniques are needed, and none of the aforementioned legacy technologies have the capability to perform the herein-disclosed techniques for transparently upgrading derived database objects. Therefore, there is a need for improved approaches.